
#ifndef __CE_GFX_ISHADER_H__
#define __CE_GFX_ISHADER_H__

#include <asset/asset.h>
#include <gfx/enum.h>
#include <string>


/**
 * \addtogroup shading
 * @{
 */

/**
 * @brief Interface for the representation of a single shader object.
 */
struct iShader : public ceAsset
{
  CE_ASSET_ID3('s', 'h', 'd')
	iShader () : CE_ASSET_SUPER() { }

  virtual ceShaderType GetShaderType () const = 0;

  virtual void SetSource (const std::string& source) = 0;
  virtual bool Compile () = 0;
  virtual bool IsCompiled () const = 0;

  virtual std::string GetCompileInfoLog () const = 0;

};


/** @} */

#endif /* ! __CE_GFX_ISHADER_H__ */
